home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / misc / interfaces3_5.lha / Interfaces / LowLevel.mod < prev    next >
Text File  |  1994-03-05  |  9KB  |  290 lines

  1. (*
  2. (*  Amiga Oberon Interface Module:
  3. **  $VER: LowLevel.mod 40.15 (28.12.93) Oberon 3.0
  4. **
  5. **      (C) Copyright 1993 Commodore-Amiga, Inc.
  6. **          All Rights Reserved
  7. **
  8. **      (C) Copyright Oberon Interface 1993 by hartmut Goebel
  9. *)          All Rights Reserved
  10. *)
  11.  
  12. MODULE LowLevel;
  13.  
  14. IMPORT
  15.   e * := Exec,
  16.   Timer *,
  17.   u * := Utility,
  18.   SYSTEM;
  19.  
  20. CONST
  21.   lowlevelName * = "lowlevel.library";
  22.  
  23. TYPE
  24.   KeyQueryPtr * = UNTRACED POINTER TO KeyQuery;
  25.  
  26.  
  27. (*****************************************************************************)
  28.  
  29.  
  30. (* structure for use with QueryKeys() *)
  31.   KeyQuery * = STRUCT
  32.     keyCode * : INTEGER;
  33.     pressed * : e.BOOL;
  34.   END;
  35.  
  36.  
  37. (*****************************************************************************)
  38.  
  39. CONST
  40. (* bits in the return value of GetKey() *)
  41.   lShift     * = 16;
  42.   rShift     * = 17;
  43.   capsLock   * = 18;
  44.   control    * = 19;
  45.   lAlt       * = 20;
  46.   rAlt       * = 21;
  47.   lAmiga     * = 22;
  48.   rAmiga     * = 23;
  49.  
  50. (* bits in the return value of GetKey() for use with KeyDescription *)
  51.   kdLShift     * = 0;
  52.   kdRShift     * = 1;
  53.   kdCapsLock   * = 2;
  54.   kdControl    * = 3;
  55.   kdLAlt       * = 4;
  56.   kdRAlt       * = 5;
  57.   kdLAmiga     * = 6;
  58.   kdRAmiga     * = 7;
  59.  
  60. (*****************************************************************************)
  61.  
  62.  
  63. (* Tags for SetJoyPortAttrs() *)
  64.   sjaDummy            * = u.user+0C00100H;
  65.   sjaType             * = sjaDummy+1;      (* force type to mouse, joy, game cntrlr *)
  66.   sjaReinitialize     * = sjaDummy+2;      (* free potgo bits, reset to autosense   *)
  67.  
  68. (* Controller types for SJA_Type tag *)
  69.   sjyTypeAutosense    * = 0;
  70.   sjaTypeGameCtlr     * = 1;
  71.   sjaTypeMouse        * = 2;
  72.   sjaTypeJoystk       * = 3;
  73.  
  74.  
  75. (*****************************************************************************)
  76.  
  77.  
  78. (* ReadJoyPort() return value definitions *)
  79.  
  80. (* Port types *)
  81.   typeNotAvail * = ASH(00,28);     (* port data unavailable    *)
  82.   typeGameCtlr * = ASH(01,28);     (* port has game controller *)
  83.   typeGameCtrl * = ASH(01,28);     (* synonym to avoid tippos  *)
  84.   typeMouse    * = ASH(02,28);     (* port has mouse           *)
  85.   typeJoystk   * = ASH(03,28);     (* port has joystick        *)
  86.   typeUnknown  * = ASH(04,28);     (* port has unknown device  *)
  87.   typeMask     * = ASH(15,28);     (* controller type          *)
  88.  
  89. (* Button types, valid for all types except JP_TYPE_NOTAVAIL *)
  90.   buttonBlue    * = 23;    (* Blue - Stop; Right Mouse                *)
  91.   buttonRed     * = 22;    (* Red - Select; Left Mouse; Joystick Fire *)
  92.   buttonYellow  * = 21;    (* Yellow - Repeat                         *)
  93.   buttonGreen   * = 20;    (* Green - Shuffle                         *)
  94.   buttonForward * = 19;    (* Charcoal - Forward                      *)
  95.   buttonReverse * = 18;    (* Charcoal - Reverse                      *)
  96.   buttonPlay    * = 17;    (* Grey - Play/Pause; Middle Mouse         *)
  97.   buttonMask    * = LONGSET{buttonBlue,buttonRed,buttonYellow,buttonGreen,
  98.                             buttonForward,buttonReverse,buttonPlay};
  99.  
  100. (* Direction types, valid for JP_TYPE_GAMECTLR and JP_TYPE_JOYSTK *)
  101.   joyUp         * = 3;
  102.   joyDown       * = 2;
  103.   joyLeft       * = 1;
  104.   joyRight      * = 0;
  105.   directionMask * = LONGSET{joyUp,joyDown,joyLeft,joyRight};
  106.  
  107. (* Mouse position reports, valid for JP_TYPE_MOUSE *)
  108.   mHorzMask * = ASH(255,0);           (* horizontal position *)
  109.   mVertMask * = ASH(255,8);           (* vertical position   *)
  110.   mouseMask * = mHorzMask + mVertMask;
  111.  
  112.  
  113. (*****************************************************************************)
  114.  
  115.  
  116. (* Tags for SystemControl() *)
  117.   sconDummy           * = u.user+00C00000H;
  118.   sconTakeoversys     * = sconDummy+0;
  119.   sconKillreq         * = sconDummy+1;
  120.   sconCdreboot        * = sconDummy+2;
  121.   sconStopinput       * = sconDummy+3;
  122.   sconAddcreatekeys   * = sconDummy+4;
  123.   sconRemcreatekeys   * = sconDummy+5;
  124.  
  125. (* Reboot control values for use with SCON_CDReboot tag *)
  126.   cdRebootOn          * = 1;
  127.   cdRebootOff         * = 0;
  128.   cdRebootDefault     * = 2;
  129.  
  130.  
  131. (*****************************************************************************)
  132.  
  133.  
  134. (* Rawkey codes returned when using SCON_AddCreateKeys with SystemControl() *)
  135.  
  136.   port0ButtonBlue    * = 072H;
  137.   port0ButtonRed     * = 078H;
  138.   port0ButtonYellow  * = 077H;
  139.   port0ButtonGreen   * = 076H;
  140.   port0ButtonForward * = 075H;
  141.   port0ButtonReverse * = 074H;
  142.   port0ButtonPlay    * = 073H;
  143.   port0JoyUp         * = 079H;
  144.   port0JoyDown       * = 07AH;
  145.   port0JoyLeft       * = 07CH;
  146.   port0JoyRight      * = 07BH;
  147.  
  148.   port1ButtonBlue    * = 0172H;
  149.   port1ButtonRed     * = 0178H;
  150.   port1ButtonYellow  * = 0177H;
  151.   port1ButtonGreen   * = 0176H;
  152.   port1ButtonForward * = 0175H;
  153.   port1ButtonReverse * = 0174H;
  154.   port1ButtonPlay    * = 0173H;
  155.   port1JoyUp         * = 0179H;
  156.   port1JoyDown       * = 017AH;
  157.   port1JoyLeft       * = 017CH;
  158.   port1JoyRight      * = 017BH;
  159.  
  160.   port2ButtonBlue    * = 0272H;
  161.   port2ButtonRed     * = 0278H;
  162.   port2ButtonYellow  * = 0277H;
  163.   port2ButtonGreen   * = 0276H;
  164.   port2ButtonForward * = 0275H;
  165.   port2ButtonReverse * = 0274H;
  166.   port2ButtonPlay    * = 0273H;
  167.   port2JoyUp         * = 0279H;
  168.   port2JoyDown       * = 027AH;
  169.   port2JoyLeft       * = 027CH;
  170.   port2JoyRight      * = 027BH;
  171.  
  172.   port3ButtonBlue    * = 0372H;
  173.   port3ButtonRed     * = 0378H;
  174.   port3ButtonYellow  * = 0377H;
  175.   port3ButtonGreen   * = 0376H;
  176.   port3ButtonForward * = 0375H;
  177.   port3ButtonReverse * = 0374H;
  178.   port3ButtonPlay    * = 0373H;
  179.   port3JoyUp         * = 0379H;
  180.   port3JoyDown       * = 037AH;
  181.   port3JoyLeft       * = 037CH;
  182.   port3JoyRight      * = 037BH;
  183.  
  184.  
  185. (*****************************************************************************)
  186.  
  187.  
  188. (* Return values for GetLanguageSelection() *)
  189.   langUnknown     * = 0;
  190.   american        * = 1;           (* American English *)
  191.   english         * = 2;           (* British English  *)
  192.   german          * = 3;
  193.   french          * = 4;
  194.   spanish         * = 5;
  195.   italian         * = 6;
  196.   portuguese      * = 7;
  197.   danish          * = 8;
  198.   dutch           * = 9;
  199.   norwegian       * = 10;
  200.   finnish         * = 11;
  201.   swedish         * = 12;
  202.   japanese        * = 13;
  203.   chinese         * = 14;
  204.   arabic          * = 15;
  205.   greek           * = 16;
  206.   hebrew          * = 17;
  207.   korean          * = 18;
  208.  
  209. (*****************************************************************************)
  210.  
  211. TYPE
  212.   (* some dummys for type security *)
  213.   KBIntHandle     * = UNTRACED POINTER TO STRUCT END;
  214.   TimerIntHandle  * = UNTRACED POINTER TO STRUCT END;
  215.   VBlankIntHandle * = UNTRACED POINTER TO STRUCT END;
  216.  
  217.   (* easy handling of GetKey() result *)
  218.   KeyDescription * = STRUCT
  219.     qualifier *: SET;
  220.     code      *: INTEGER;
  221.   END;
  222.  
  223.  
  224. (* $StackChk- $RangeChk- $NilChk- $OvflChk- $ReturnChk- $CaseChk- *)
  225.  
  226. VAR
  227.   base *: e.LibraryPtr;
  228.  
  229. (*--- functions in V40 or higher (Release 3.1) ---*)
  230.  
  231. (* CONTROLLER HANDLING *)
  232.  
  233. PROCEDURE ReadJoyPort    *{base,-001EH}(port{0}       : LONGINT): LONGSET;
  234.  
  235. (* LANGUAGE HANDLING *)
  236.  
  237. PROCEDURE GetLanguageSelection *{base,-0024H}()       : SHORTINT;
  238.  
  239. (* KEYBOARD HANDLING *)
  240.  
  241. PROCEDURE GetKey         *{base,-0030H}()             : KeyDescription;
  242. PROCEDURE QueryKeys      *{base,-0036H}(queryArray{8} : KeyQueryPtr;
  243.                                         arraySize{1}  : LONGINT);
  244. PROCEDURE AddKBInt       *{base,-003CH}(intRoutine{8} : e.PROC;
  245.                                         intData{9}    : e.APTR): KBIntHandle;
  246. PROCEDURE RemKBInt       *{base,-0042H}(intHandle{9}  : KBIntHandle);
  247.  
  248. (* SYSTEM HANDLING *)
  249.  
  250. PROCEDURE SystemControlA *{base,-0048H}(tagList{9}    : ARRAY OF u.TagItem): u.TagID;
  251. PROCEDURE SystemControl  *{base,-0048H}(firstTag{9}.. : u.Tag): u.TagID;
  252.  
  253. (* TIMER HANDLING *)
  254.  
  255. PROCEDURE AddTimerInt    *{base,-004EH}(intRoutine{8} : e.PROC;
  256.                                         intData{9}    : e.APTR): TimerIntHandle;
  257. PROCEDURE RemTimerInt    *{base,-0054H}(intHandle{9}  : TimerIntHandle);
  258. PROCEDURE StopTimerInt   *{base,-005AH}(intHandle{9}  : TimerIntHandle);
  259. PROCEDURE StartTimerInt  *{base,-0060H}(intHandle{9}  : TimerIntHandle;
  260.                                         timeInterval{0}: LONGINT;
  261.                                         continuous{1} : e.LONGBOOL);
  262. PROCEDURE ElapsedTime    *{base,-0066H}(VAR context{8}: Timer.EClockVal): LONGINT;
  263.  
  264. (* VBLANK HANDLING *)
  265.  
  266. PROCEDURE AddVBlankInt   *{base,-006CH}(intRoutine{8} : e.PROC;
  267.                                         intData{9}    : e.APTR): VBlankIntHandle;
  268. PROCEDURE RemVBlankInt   *{base,-0072H}(intHandle{9}  : VBlankIntHandle);
  269.  
  270. (* MORE CONTROLLER HANDLING *)
  271.  
  272. PROCEDURE SetJoyPortAttrsA *{base,-0084H}(portNumber{0}: LONGINT;
  273.                                          tagList{9}   : ARRAY OF u.TagItem): BOOLEAN;
  274. PROCEDURE SetJoyPortAttrs *{base,-0084H}(portNumber{0}: LONGINT;
  275.                                          firstTag{9}..: u.Tag): BOOLEAN;
  276.  
  277.  
  278. (* only a dummy to make sure SIZE(KeyDescriptor) = SIZE(LONGINT) *)
  279. PROCEDURE CheckKeyDescriptorSize(kd: KeyDescription): LONGINT;
  280. BEGIN RETURN SYSTEM.VAL(LONGINT,kd); END CheckKeyDescriptorSize;
  281.  
  282. BEGIN
  283.   base := e.OpenLibrary(lowlevelName,40);
  284.  
  285. CLOSE
  286.   IF base # NIL THEN e.CloseLibrary(base); END;
  287.  
  288. END LowLevel.
  289.  
  290.